---
title: CopyEngine 剪贴板
icon: ClipboardCopy
relatedFile: app/src/core/service/dataManageService/copyEngine/copyEngine.tsx
---

该服务主要负责项目内节点的复制与粘贴功能，包括管理一个内部的虚拟剪贴板以及与系统剪贴板的交互。它能够处理多种类型的节点数据，并支持文本和图像的复制粘贴。

## 虚拟剪贴板管理

服务维护一个内部的虚拟剪贴板，用于临时存储复制的节点数据。当用户执行复制操作时，选中的节点会被序列化并存储在此虚拟剪贴板中。

## 复制操作

当用户触发复制命令时，服务会：
*   获取当前选中的所有实体节点。
*   将选中的节点数据序列化并更新到虚拟剪贴板。
*   尝试将文本节点和图像节点的数据复制到系统剪贴板，以便在应用程序外部使用。

## 粘贴操作

当用户触发粘贴命令时，服务会：
*   优先检查虚拟剪贴板是否有数据。
*   如果虚拟剪贴板为空，则尝试从系统剪贴板读取数据。
*   根据读取到的数据类型（纯文本、SVG、URL、Mermaid 图表或图片），创建相应的节点并添加到画布上。
*   新创建的节点会根据鼠标当前位置进行定位，并尝试添加到鼠标所在区域的 Section 中。

## API

### `clearVirtualCopyBoardData(): void`

清空内部的虚拟剪贴板数据，包括存储的实体和外接矩形信息。

### `copy(): void`

执行复制操作。将当前选中的节点复制到虚拟剪贴板，并尝试同步到系统剪贴板。

### `isVirtualClipboardEmpty(): boolean`

检查虚拟剪贴板是否为空。

### `paste(): void`

执行粘贴操作。优先从虚拟剪贴板粘贴，若为空则从系统剪贴板读取并粘贴。

### `pasteWithOriginLocation(): void`

将虚拟剪贴板数据粘贴到其原始位置。

### `readClipboard(): Promise<void>`

异步读取系统剪贴板中的文本和图像数据，并尝试将其粘贴到画布上。

### `copyEnginePastePlainText(item: string): Promise<void>`

处理从剪贴板读取到的纯文本内容，根据内容类型（如 SVG 字符串、URL、Mermaid 图表或普通文本）创建并添加相应的节点到画布。

### `copyEnginePasteImage(item: Blob): Promise<void>`

处理从剪贴板读取到的图像 Blob 数据，创建并添加图像节点到画布。
